// --------------------------------
// YM.util.popbox
// --------------------------------
(function($) {
	if (!$ || !window.YM) return;
	// ----------------------------
	YM.namespace('YM.utilStyles');
	$.extend(YM.utilStyles, {
		'util-popbox': 'z-index:9010;position:absolute;top:-10000px;left:-10000px;'
	});
	// ----------------------------
	YM.namespace('YM.util');
	// ----------------------------
	if (YM.util.popbox) return;
	// ----------------------------
	YM.util.popbox = {};
	YM.util.popbox.id = 'util-popbox';
	YM.util.popbox.status = false;
	YM.util.popbox.boxes = {};	//页面box集合
	YM.util.popbox.boxElm = null;	//当前boxElement
	// 打开弹出层
	YM.util.popbox.init = function() {
		if ($('#'+this.id).size()==0) {
			this.container = $('<div id="'+this.id+'" style="'+ YM.utilStyles[this.id] +'"></div>');
			$('body').append(this.container);
			YM.util.recyclebin.init();
		}
	};
	YM.util.popbox.createBoxId = function() {
		return 'popbox-'+ (new Date().getTime());
	};
	YM.util.popbox.show = function(param) {
		this.init();
		if (param.url) {
			var key = param.url;
			if (this.boxes[key]) {
				this.showBox(this.boxes[key], param.op, param.overbg);
			} else {
				var boxId = this.createBoxId();
				var boxElm = $('<div id="'+boxId+'"></div>');
				YM.util.recyclebin.add(boxElm);
				YM.util.popbox.boxes[key] = boxId;
				if (param.css) {
					$('head').append('<link rel="stylesheet" type="text\/css"  href="'+  param.css +'" \/>');
				}
				boxElm.load(key, function() {
					YM.util.popbox.showBox(boxId, param.op, param.overbg);
					if (param.callback) param.callback(boxElm);
				});
			}
		} else if (param.content) {
		//	this.showContent(param);
			var key = $('<div>'+param.content+'</div>').text();
			if (this.boxes[key]) {
				this.showBox(this.boxes[key], param.op, param.overbg);
			} else {
				var boxId = this.createBoxId();
				var boxElm = $('<div id="'+boxId+'">'+param.content+'</div>');
				YM.util.recyclebin.add(boxElm);
				YM.util.popbox.boxes[key] = boxId;
				YM.util.popbox.showBox(boxId, param.op, param.overbg);
				if (param.callback) param.callback(boxElm);
			}
			/* 回收机制，在原先列表页中快速预览时使用有问题，后续使用需仔细测试, by shawyon, 2012-09-28 */
		} else if (param.id) {
			var boxId = param.id;
			YM.util.popbox.showBox(boxId, param.op, param.overbg);
		}
	};
	YM.util.popbox.showBox = function(id, op, overbg) {
		this.boxElm = $('#'+id);
		if (this.boxElm.size()==0) return;
		YM.util.overlayer.showLayer(op, overbg);
		this.boxElm.show();
		this.container.html('').append(this.boxElm).show();
		this.status = true;
		this.resize();
		YM.page.keyHandler.add(document, 'ESC', 'esc-popbox', function() {
			YM.util.popbox.close();
		});
	};
	YM.util.popbox.showContent = function(param) {
		this.boxElm = null;
		YM.util.overlayer.showLayer(param.op, param.overbg);
		this.container.html(param.content).show();
		if (param.callback) param.callback();
		this.status = true;
		this.resize();
		YM.page.keyHandler.add(document, 'ESC', 'esc-popbox', function() {
			YM.util.popbox.close();
		});
	};
	// 调整弹出层大小
	YM.util.popbox.resize = function() {
		if (this.status) {
			var _left = ($(window).width() - this.container.width())/2;
			var _top = ($(window).height() - this.container.height())/2;
			this.container.css({
				left: $(document).scrollLeft() + Math.max(_left,20) +'px',
				top: $(document).scrollTop() + Math.max(_top,20) +'px'
			});
			if ($.browser.isIE6) this.container.bindYMUI('HideOverElements', 'select,object');
		}
	};
	// 关闭弹出层
	YM.util.popbox.close = function(callback) {
		if (!this.status) return;
		YM.util.recyclebin.add(this.boxElm);
		this.container.hide();
		YM.util.overlayer.hideLayer();
		if ($.browser.isIE6) this.container.bindYMUI('ShowOverElements', 'select,object');
		this.status = false;
		if (callback) callback();
		YM.page.keyHandler.remove(document, 'esc-popbox');
	};
	// 自适应调整弹出层位置
	$(window).resize(function() {
		YM.util.popbox.resize();
	});
	// ----------------------------
	YM.timestat.add('load-util-popbox');
	YM.debug('popbox.js', '初始化成功');
})(jQuery);